#include <extensions/gldml.h>
#include "world.h"
#include "resource.h"
#include <cstdlib> 
#include <ctime> 
#include <iostream>

void world::init(float _x,float _y, float _z, float _speed)
{
    //positie world
    x = _x;
    y = _y;
    z = _z;
    
    //snelheid, breedte van een block, min en max aantal blocks, temp reset.
    speed       = _speed;
    width_world = 7.50f;
    min_tile    = 0;
    max_tile    = 20;
    temp        = 0.0f;
    
    //init blocks.
    for(int i=min_tile; i<max_tile; i++)
    {
        Block[i].x      = x;
        Block[i].y      = (i*width_world);
        Block[i].z      = z;
        Block[i].type   = 0;
    }
    
    //random init
    srand((unsigned)time(0)); 
}

float world::getnewy()
{
    //Zoek de hoogste waarde onder de Blocks van coordinaat y en return deze.
    for(int i=min_tile; i<max_tile; i++)
    {
        if(Block[i].y > temp) temp = Block[i].y;
    }
    return temp;
}

void world::update(float playery)
{
    //Als de y van de block de speler paseert met een marge van ongeveer 2.0f dan word de block 
    //verderop geplaats naar zijn niewe plek met een nieuwe type-nummer.
    for(int i=min_tile; i<max_tile; i++)
    {
        if(Block[i].y <= -7.55f)
        {
            //printf("Block[%i] old y: %f \n",i,Block[i].y);
            Block[i].y = getnewy(); //float(max_tile*7.55f);
            Block[i].type = (rand()%2);
            //printf("Block[%i] has passed \n",i);
            //printf("New y: %f\n",Block[i].y);
            //printf("New type block: %i\n",Block[i].type);
        }
        else
        {
            Block[i].y-=0.5f;
        }
    }
}

void world::draw()
{
    //teken de bloks op de beeldscherm.
    for(int i=min_tile; i<max_tile; i++)
    {
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        glScalef(5.0f,5.0f,5.0f);
        glTranslatef(Block[i].x,Block[i].y, Block[i].z);
        glBindTexture(GL_TEXTURE_2D,objWorld[Block[i].type].textureid);
        drawobject(&objWorld[Block[i].type].model);            
    }
}
